关于类协作安装程序注册入口函数调用不成功的问题,各位大哥帮忙看看。

ggj9921129 2008-01-31 03:21:24
我写了一个类协作安装程序,通过.inf注册后,查看注册表正常,系统目录下也copy了我的.dll文件。

在发现我注册的Class GUID的设备后,我的DLL文件也确实被初始化了。但我注册的协作安装入口函数
却每次都不会被调用。不知道是怎么回事,希望各位先达能指点一二。

我的程序如下:
///////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
MessageBox(NULL,"(_)","ggj",MB_OK);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

////////////////////入口函数
__declspec(dllexport) DWORD CALLBACK CoInstallEntryPoint(
IN DI_FUNCTION InstallFunction,
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN OUT PCOINSTALLER_CONTEXT_DATA Context)
{
MessageBox(NULL,"调用成功","ggj",MB_OK);
return NO_ERROR;
}

注册后,每次安装注册的设备,都会显示"(_)"的提示框——表示DLL被初始化了。
但无论我怎么改函数的声明格式,"调用成功"的提示框一直都没出现过——说明我注册的类协作安装入口函数CoInstallEntryPoint
没有参与到设备驱动的安装过程中。
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggj9921129 2009-03-05
  • 打赏
  • 举报
回复
分数送楼上二位了。
谢谢关注。
ggj9921129 2009-03-05
  • 打赏
  • 举报
回复
这个帖子中的问题已经解决了。抱歉的很,这么久了才上来结帖。
我的犯的错误是编译DLL时,使用了VC6的环境;而在进行驱动程序开发时,你的代码都应该是背DDK自带的编译环境进行编译的。
ggj9921129 2009-03-05
  • 打赏
  • 举报
回复
楼上,用extern "C"声明是告诉编译器使用C编译器而不是C++编译器编译我的导出函数。
C++编译器在编译一个函数时为了实现重载,编译得出的实际函数名和你制定的名字有所不同。
由于这个是写在DLL中的,在外部调用这个函数时,只会根据你指定的函数名调用。所以我这里要用extern "C"声明编译器。
qiouxinyu_yuping 2008-08-21
  • 打赏
  • 举报
回复
楼主,您好:

我现在也碰到“入口函数不被调用”的问题,因为刚刚接触这个,不太明白你说的导出函数 extern "C"的作用,因为我建立的DLL中都是C文件,也需要 extern "C"么,具体该怎么做,请指教一下,谢谢!
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
关注 接分
ggj9921129 2008-02-01
  • 打赏
  • 举报
回复
问题已经解决了。是我在导出函数时忘了用
extern "C" 声明了。

昨天查SetupDiCallClassInstaller的源代码。
看到它加载我的导出函数时才想到好像我的导出函数有问题。
爆汗!!!

不过新问题又来了:
虽然现在"调用成功"的提示框可以出来了,但驱动却不能正常安装了。
安装完成界面提示:
安装设备时,出现一个错误
句柄无效
是在接收到 DIF_ALLOW_INSTALL 我的函数返回后出现的。
不知道应该怎么调试,有经验的朋友说说。
ggj9921129 2008-01-31
  • 打赏
  • 举报
回复
补充说明:
我的代码是加载在一个win32 DLL工程中编译生成的.dll文件。

21,599

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧